The SCSI interface may be best described as a device independent input/output bus which allows a variety of peripheral devices to be connected to a personal computer system. SCSI refers to Small Computer Systems Interface, and was initially developed to provide a disk drive interface that supported logical addressing of data rather than the more prevalent physical addressing. In addition, the SCSI interface was developed to transfer information in parallel, byte-wise fashion instead of serially, thus, ending certain compatibility difficulties associated with developing new disk drive technologies and bringing them to the marketplace. The electrical characteristics and signal protocols of the SCSI interface were developed in such a manner that the requirements of various peripheral devices could be accommodated with relative ease and flexibility. In particular, the SCSI interface protocol defines a number of commands which are available for accessing and querying a particular peripheral device regarding the parameter set required for the device to operate correctly. This particular feature of the SCSI interface makes it possible for a system designer to write a software device driver program for a generalized peripheral device, without regard to device specific parameter set details.
In accordance with the various versions of the SCSI interface, such as SCSI-1, SCSI-2, and SCSI-3, anywhere from 8 to 32 individual peripheral devices can be addressed on an SCSI bus depending on whether the bus is an 8-bit bus, a 16-bit bus or a 32-bit bus. These devices are generally categorized as initiators and targets, with any particular peripheral device able to play either role at a particular point in time. Specifically, a peripheral device functioning as an initiator, is a device that initiates an information transaction or data transfer by giving another peripheral device a particular task to perform. An example of an initiator might well be the SCSI host adapter of a personal computer system, while an example of a typical target device might well be a rotating disk data storage system such as a hard disk drive or CD-ROM. A target peripheral device may be thus seen as the device which carries out the task identified by the initiator.
As was mentioned previously, and as is depicted in the generalized block diagrams of FIGS. 1A, 1B and 1C, an SCSI interface bus configuration may have any combination of initiator and target devices, so long as the total does not exceed the number allowed by the bus width (8, 16, or 32). Particular basic SCSI configurations illustrated in FIG. 1A include a single initiator, single target configuration such as a computer system host adapter coupled to an SCSI hard disk controller; a single initiator, multiple target configuration, such as a computer system host adapter coupled to a hard disk drive and a CD-ROM is depicted in FIG. 1B; and FIG. 1C illustrates a multiple initiator, multiple target configuration, such as might obtain in a local area network in which multiple computer systems are connected to multiple printers, disk drives, CD-ROMs, and the like.
The SCSI bus may be from 8 to 32 bits wide, depending on configuration, with the standard SCSI bus being an 8-bit wide bus comprising 18 signals. In accord with the SCSI specification, these signals are either single ended active-low signals or differential signals defined by output driver circuitry on the initiator and target devices. The reason for this signal convention is that the SCSI bus is required to be terminated at both ends for proper operation. Passive termination is typically provided by termination resistors while active termination may be provided by any number of means well understood by those having skill in the art. In single ended mode terminators (whether active or passive) are coupled to a power supply which is preferably 5 volts, but may range from about 3.25 to about 6.0 volts, and function to pull-up the signal lines of the bus to about 2.5 to about 3.0 volts, thereby holding the signals inactive until an output driver pulls-down the signal line to an active low. Advantageously, termination in combination with an active-low signal level, makes possible to leave devices connected to the bus whose power has been turned-off. However, as will be described in greater detail below, termination often impacts the ability of an output driver to meet certain other SCSI signal conventions, particularly with regard to slew rate.
Slew rate is defined as the time rate of change of the rising or falling edge of a signal. The SCSI specification for slew rate is 500 millivolts per nanosecond (maximum) for both rise time and fall time, particularly for the data signals (DB(0)-DB(7)), request (REQ), and acknowledge (ACK). Particularly with regard to signal rise times, once a particular signal is inactive, i.e. no longer low, terminators tend to pull the bus up to approximately 2.5 volts very quickly and very often with slew rates in excess of 500 millivolts per nanosecond. In addition, this tendency is magnified when the SCSI bus is relatively unpopulated, often termed lightly loaded. Such a situation would obtain where an SCSI bus was coupled between a single host initiator and a single target device, as depicted in FIG. 1A.
Light bus loading also has the effect of reducing the number of multiple, parallel, parasitic capacitances coupled to the bus which, in turn, increases the slew rate of an active-low going signal, i.e., fall time, to values in excess of 500 millivolts per nanosecond. Conversely, highly loaded buses exhibit the opposite behavior, slew rates for both rising and falling edges dropping to values considerably below 500 millivolts per nanosecond. Such a situation would obtain where an SCSI bus was coupled between multiple initiators and multiple target devices, as depicted in FIG. 1C. While low slew rate values are not necessarily in violation of the SCSI specification, low slew rate values are disadvantageous in SCSI bus systems operating at modern-day speeds in the range of about 20 to 40 megahertz (as in the FAST 20 and FAST 40 protocol domains).
There have been various attempts over the past few years to design an output driver which takes into account the above-mentioned behavior. Most of these output drivers include highly complex circuitry, including precision voltage references. While effective to a degree, precision voltage references must be designed to take process variations into account and, in addition, consume a rather large portion of an output driver floor plan. The complexity of these circuits and their inefficient silicon utilization, are rather disadvantageous when considered in light of the modern trend toward greater and greater functionality in smaller and smaller chip areas.
Accordingly, it will be seen that there is a need for some means to condition the output signal slew rate performance of an output driver of a for example, SCSI controller, to take into account the loading flexibility of an SCSI bus as well as take into account the effects of termination (active or passive) on the pull-up characteristics of the bus. Such an output driver should have an adjustable slew rate controller such that the slew rate for both rise times and fall times is controlled to a value proximate to the SCSI specification value, without exceeding the specification or falling substantially below it. The slew rate control should be adjustable to take into account loading characteristics of the SCSI bus, with one of a number of different slew rate options being selectable depending on whether the bus is lightly loaded, heavily loaded, or somewhere in between. In addition, slew rate control should comprise circuitry which is simple and which may be implemented without consuming large portions of valuable silicon real estate.